﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Generics
    {
        /// <summary>
        /// 泛型中的静态成员变量：在C#1.x中，类的静态成员变量在不同的类实例间是 共享的,C#2.0中,静态成员变量在相同封闭类间共享，不同的封闭类间不共享。示 例代码:
        /// 小结：类实例_point和_point2是同一类型，他们之间共享静态成员变量，但 类实例_point3却是和_point、_point2完全不同的类型，所以不能和_point、 _point2共享静态成员变量。
        /// 说明：泛型还有许多内容，像泛型委托，泛型接口，泛型方法，泛型类，泛型 约束，其实上面的都是泛型的最基本的知识，其它的应用都建立在这些基础之上 。
        /// </summary>
        public static void MainMethod()
        {
            Point<int> point1 = new Point<int>(1);
            Point<int> point2 = new Point<int>(2);
            Point<long> point3 = new Point<long>(3);

            Console.WriteLine(point1.ToString());
            Console.WriteLine(point2.ToString());
            Console.WriteLine(point3.ToString());
            Console.ReadKey();
        }

        public class Point<T>
        {
            public static T width;

            public Point(T _width)
            {
                width = _width;
            }

            public override string ToString()
            {
                //return base.ToString();
                return width.ToString();
            }
        }
    }

    public class MyGenericClass<T1> : IEnumerable<T1>
        where T1 : BaseMathObjects//, IBaseInterface, IMathObjects
        //where T2 : BaseMathObjects
        //where T3 : BaseMathObjects
    {
        private T1  innerT1Object;

        public MyGenericClass(T1 item1)  
        {
            innerT1Object = item1;
            innerT1Object = default(T1);
        }

        public T1 InnerT1Object
        {
            get { return innerT1Object; }
        }


        #region Implement the IEnumerator<T1>
        
        public IEnumerator<T1> GetEnumerator()
        {
            throw new NotImplementedException();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion

    }


}
